// 导入Vue CLI的配置工具
const { defineConfig } = require('@vue/cli-service')
// 导入代码压缩插件（用于生产环境优化JS代码）
const TerserPlugin = require('terser-webpack-plugin')
// 导入资源压缩插件（用于生成GZIP压缩文件）
const CompressionWebpackPlugin = require('compression-webpack-plugin')
// 导入Node.js的路径处理模块
const path = require('path')
// 环境判断
const ENV = process.env.NODE_ENV === 'production'
const enableCompress = process.env.VUE_APP_COMPRESS_ENABLED !== 'false' // 压缩开关

// 导出Vue项目配置
module.exports = defineConfig({
  // 配置需要被Babel转译的依赖（解决第三方库兼容性问题）
  transpileDependencies: true,

  // 配置项目部署的基础路径
  // 生产环境打包后可在本地直接打开，无需依赖服务器根目录
  publicPath: './',

  // 生产环境是否生成sourceMap（调试映射文件）
  // 关闭可减小打包体积，提高安全性（避免源码泄露）
  productionSourceMap: false,

  // 是否在开发环境下通过ESLint校验代码
  // true表示开启，保存时会自动检查并提示代码规范问题
  lintOnSave: true,

  // 配置Webpack相关选项（支持对象或函数形式）
  configureWebpack: {
    // 配置模块解析规则
    resolve: {
      // 配置路径别名，简化代码中导入路径的写法
      alias: {
        // 用@代替src目录路径，例如：@/components/xxx.vue
        '@': path.resolve(__dirname, 'src')
      }
    },

    // 根据环境变量配置生产环境专属插件
    plugins: ENV
      ? [
          // 配置TerserPlugin插件（JS代码压缩与优化）
          new TerserPlugin({
            terserOptions: {
              output: {
                comments: false // 移除代码中的注释（包括单行和多行注释）
              },
              warnings: false, // 关闭压缩过程中的警告信息
              compress: {
                drop_console: true, // 移除所有console相关代码
                drop_debugger: true, // 移除所有debugger调试语句
                pure_funcs: ['console.log'] // 彻底删除console.log函数调用
              }
            }
          }),
          // 配置CompressionWebpackPlugin插件（资源GZIP压缩）
          enableCompress &&
            new CompressionWebpackPlugin({
              test: /\.(js|css|html|svg)$/, // 匹配需要压缩的文件类型
              threshold: 10240, // 仅压缩大小超过10KB（10240字节）的文件
              minRatio: 0.8, // 压缩率小于0.8时才保留压缩文件（确保压缩有效）
              algorithm: 'gzip', // 指定压缩算法为GZIP
              filename: '[path][base].gz' // 压缩后的文件名格式（原文件名+'.gz'）
              // deleteOriginalAssets: false // 是否删除原文件（默认false，建议保持默认）
            })
        ].filter(Boolean)
      : [] // 开发环境不加载上述插件，提升开发构建速度
  },

  // 开发环境服务器配置（npm run serve时生效）
  devServer: {
    open: true, // 启动开发服务器后自动打开浏览器
    host: '0.0.0.0', // 服务器主机地址（本地开发一般用localhost）
    port: 1000 // 开发服务器端口号（默认8080，这里改为80）
    // 跨域代理配置（按需启用）
    // proxy: {
    //   '/test': { // 匹配以/test开头的请求
    //     target: 'https://zhanshi.aronfly.cn', // 代理目标服务器地址
    //     pathRewrite: { '^/test': '' } // 重写路径，去掉请求中的/test前缀
    //   }
    // }
  },
  css: {
    loaderOptions: {
      postcss: {
        postcssOptions: {
          plugins: [require('tailwindcss'), require('autoprefixer')]
        }
      }
    }
  }
})
